﻿'FWRK: Logueo al sistema

Partial Public Class Login
    Inherits System.Web.UI.Page

#Region "Eventos"

    ''' <summary>
    ''' Este método se utiliza para vincular el formulario con el tema seleccionado.
    ''' </summary>
    ''' El primer evento que se dispara
    ''' <param name="sender">Objeto emisor del evento.</param>
    ''' <param name="e">Argumentos pasados por parámetro.</param>
    Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit

        '*******************************************************************
        'Comentado porque aplicandole el tema por codigo no encuentra el CSS
        '*******************************************************************
        'Aplicacion de Tema
        'If Not Session("Tema") Is Nothing Then
        'Page.Theme = Session("Tema").ToString
        'End If

        Application("LogOut") = 0
    End Sub

    ''' <summary>
    ''' Método que se ejecuta cuando un operador está correctamente logueado en el modelo de seguridad interno de ASP.Net
    ''' </summary>
    ''' <remarks>Desde este método se llama a EsUnOperadorValido para loguear al usuario dentro del modelo de seguridad del Framework.</remarks>
    ''' Este evento se dispara cuando un usuario es autenticado en ASP.Net para ingresar al sitio web
    ''' <param name="sender">Objeto emisor del evento.</param>
    ''' <param name="e">Argumentos pasados por parámetro.</param>
    Private Sub LoginApp_LoggedIn(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginApp.LoggedIn
        Dim sNombreOperador As String = StartFrame.BR.Web.FuncionesGlobales.ValidarTexto(LoginApp.UserName.ToUpper)
        'Verifica si es un operador valido y lo registra en el Fwrk
        If Not EsUnOperadorValido(sNombreOperador) Then
            'Aunque las credenciales coinciden p/ASP, NO es un operador en regla para
            'utilizar la aplicación web => Avisa, ya que la seguridad avanzada no le
            'permitirá hacer uso de la aplicación.
            MsgBox("El usuario " & sNombreOperador & " no está correctamente habilitado para utilizar la aplicación.", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
        Else
            Dim sCondicion As String
            Dim dsSession As DataSet

            sCondicion = "cd_operador = " + SystemFunctions.Strings.StringToSql(sNombreOperador)

            Try
                'Cambia la variable global del tema con respecto a la predeterminada del usuario
                dsSession = StartFrame.DA.Sql.Select(ConnectionString, "cd_tema", "wad_operadores", sCondicion)

                If dsSession.Tables(0).Rows.Count > 0 Then
                    Session("Tema") = dsSession.Tables(0).Rows(0)(0)
                End If
            Catch ex As Exception
                'No pudo traer el dato de la base de datos
            End Try

        End If
    End Sub

#End Region

#Region "Métodos"

    ''' <summary>
    ''' Método que e encarga de loguear a un operador dentro del framework.
    ''' </summary>
    ''' <remarks>Si el operador no puede loguearse, se informará al usuario, ya que en tal caso, el mismo tendría una credencial válida para ASP.Net pero inválida para el Framework, por lo que no podrá ingresar a ninguna opción del menú.</remarks>
    ''' Verifica el logueo del operador
    ''' <param name="NombreOperador">Nombre del operador a loguear según se haya registrado en el framework.</param>
    ''' <returns>
    ''' True si el operador fue logueado correctamente.
    ''' False caso contrario.
    ''' </returns>
    Private Function EsUnOperadorValido(ByVal NombreOperador As String) As Boolean

        Dim sNombreOperador As String = NombreOperador
        Dim sClaveAcceso As String

        'Componente de seguridad
        Dim sca As New StartFrame.BR.Sca

        Try
            'Verifica si existe el operador dentro del sistema
            If sca.ExisteOperador(sNombreOperador) Then
                'Obtiene el password y lo desencripta porque ya se autenticó en ASP.NET
                sClaveAcceso = CType(Sql.Search(ConnectionString, "va_clave_acceso", "wad_operadores", "cd_operador = " & SystemFunctions.Strings.StringToSql(sNombreOperador)), String)
                If sClaveAcceso <> "" Then
                    sClaveAcceso = SystemFunctions.Strings.EncryptString(sClaveAcceso, KEY, SystemFunctions.Strings.Accion.DECRYPT)
                End If

                'Verifica si es un usuario válido
                If sca.Login(sNombreOperador, sClaveAcceso) Then
                    'Propiedades de la Common
                    Common.Env.Operador = sNombreOperador
                    Common.Env.Password = sClaveAcceso

                    'Obtiene parametros y carga las prop. de Common
                    Dim parametros As String = "EMPRESA,APPNAME,VERSION "
                    Dim param As New StartFrame.BR.Utilitarios.Parametros

                    Dim valores() As String = param.getParametro(parametros).Split(","c)

                    Common.Env.Empresa = valores(0)
                    Common.Env.AppName = valores(1)
                    Common.Env.AppVersion = valores(2)

                    'Logueo exitoso!
                    Return True
                Else
                    'Error en logueo
                    Return False
                End If
            Else
                'No existe el operador

                Return False
            End If

        Catch ex As Exception
            'Error al intentar loguearse al Fwrk
            Return False
        End Try

    End Function

#End Region

End Class
